package br.com.tcc.automacao.usuario.controle;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.tcc.automacao.historico.negocio.HistoricoNegocio;
import br.com.tcc.automacao.usuario.negocio.Usuario;
import br.com.tcc.automacao.usuario.negocio.UsuarioNegocio;
import br.com.tcc.automacao.util.PalavrasProp;
import br.com.tcc.automacao.util.SingletonFactory;
import br.com.tcc.automacao.util.Uteis;

@Controller
public class UsuarioControle {
	
	HistoricoNegocio historicoNegocio;
	UsuarioNegocio usuarioNegocio;
	public UsuarioControle() {
		super();
		usuarioNegocio = (UsuarioNegocio) SingletonFactory.getSingleton(UsuarioNegocio.class);
		historicoNegocio = (HistoricoNegocio) SingletonFactory.getSingleton(HistoricoNegocio.class);
	}
	
   	@RequestMapping("/login")
	public String usuarioLogar(HttpServletRequest request){
   		Usuario usuario = new Usuario();

   		String senha = request.getParameter("senha");
   		String nome = request.getParameter("nome");

   		usuario = usuarioNegocio.consultarUsuario(nome);

   		if(senha != null && usuario != null){

   			if(usuario.getSenha().equals(senha)){
   				request.getSession().setAttribute("usuarioLogado", usuario);
   				JSONArray jsonArray = new JSONArray(usuario.getPermissoes());
   				request.getSession().setAttribute("permissoesJson", jsonArray);
   				
   				historicoNegocio.adicionarHistorico(usuario, "Fez login", new Date());
   				return "redirect:"+PalavrasProp.ENDERECO+"/restrito/home";    			    		    
   			} else {
   				return "redirect:"+PalavrasProp.ENDERECO+"/login.jsp?p=senha-invalida";    			    		    
   			}

   		}
	    
	    return "redirect:"+PalavrasProp.ENDERECO+"/login?p=usuario-senha-invalido";
	}

   	@RequestMapping("/permissoes-json")
   	public void usuarioLogadoPermissoes(HttpServletRequest request, HttpServletResponse response) throws Exception{
   		
   		Usuario usuario = UsuarioNegocio.obterSessaoUsuarioLogado(request);
   		
   		if(usuario != null){
   			JSONArray jsonArray = new JSONArray(usuario.getPermissoes());
   			Uteis.respostaJson(jsonArray.toString(), request, response);
   		}
   		
   	}
   	
   	@RequestMapping("/deslogar")
   	public String usuarioDeslogar(HttpServletRequest request){
   		Usuario usuario = (Usuario) request.getSession().getAttribute("usuarioLogado");
   		if(usuario != null){
   			historicoNegocio.adicionarHistorico(usuario, "Fez logout", new Date());
   			request.getSession().removeAttribute("usuarioLogado");   			
   		}
   		return "redirect:"+PalavrasProp.ENDERECO+"/login";    			    		    
   	}
   	
   	@RequestMapping("/excluir-usuario")
   	public String usuarioExcluir(HttpServletRequest request){
   		Usuario usuarioLogado = UsuarioNegocio.obterSessaoUsuarioLogado(request);
   		if((usuarioLogado != null) && UsuarioNegocio.possuiPermissao(usuarioLogado.getPermissoes(), "editar-usuario")){
   			String idString = request.getParameter("id");
   			Long idLong = Uteis.converterParaLong(idString);
   			
   			Usuario usuarioExcluir = usuarioNegocio.consultarUsuario(idLong);
   			usuarioNegocio.remover(usuarioExcluir);
   			
   			historicoNegocio.adicionarHistorico(usuarioLogado, "Removeu o usuario "+ usuarioExcluir.getNome()+" - "+usuarioExcluir.getId(), new Date());
   			request.getSession().removeAttribute("usuarioLogado");   			
   		}
   		return "redirect:"+PalavrasProp.ENDERECO+"/login";    			    		    
   	}

}
